package com.tdam2011.grupo04.entidades;

import java.util.ArrayList;
import java.util.List;

import com.tdam2011.grupo04.Sql;

import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.provider.ContactsContract;

public class ListaContactos {
	private List<Contacto> contactos;
	
	public List<Contacto> getContactos(String orden, Context context){
		if(contactos == null)
			contactos= cargarContactos(orden, context);
		return contactos;
	}
	
	private List<Contacto> cargarContactos(String orden, Context context){
		Cursor cur = obtenerCursorContactos(orden, context.getContentResolver());
		
		contactos = new ArrayList<Contacto>();

		if (cur.getCount() > 0) {
			while (cur.moveToNext()) {
				String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
				String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
				int foto= cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
				int tieneTelefono= cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
				
				Contacto contacto = new Contacto();
				contacto.setNombre(name);
				contacto.setId(id);
				contacto.setTieneTelefono(tieneTelefono);
				
				String user= obtenerUsuario(id, context);
				contacto.setUsuario(user);
				
				if(foto > 0){
					contacto.setTieneFoto(true);
					contacto.setFoto(id);
				}
	
				if (contacto.tieneTelefono()) contacto.cargarTelefonos(context.getContentResolver());
				if (contacto.tieneMail()) contacto.cargarEmails(context.getContentResolver());
				
				contactos.add(contacto);
			}
		}
		cur.close();
		return contactos;
	}
	
	private Cursor obtenerCursorContactos(String orden, ContentResolver cr){
		String[] projection = new String[]{
				ContactsContract.Contacts._ID,
				ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.PHOTO_ID,
                ContactsContract.Contacts.HAS_PHONE_NUMBER
		};

		Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
				projection, null, null, orden);
		
		return cur;
	}
	
	private String obtenerUsuario(String id, Context context){
		SharedPreferences app_preferences = context.getSharedPreferences("usuarioRegistrado", Context.MODE_PRIVATE); 
        String duenio= app_preferences.getString("usuario", null);
		
		Sql sql= new Sql(context);
		Cursor cur= sql.getUsuario(duenio, id);
		String usuario= null;
		if(cur.getCount() > 0){
			cur.moveToFirst();
			usuario= cur.getString(cur.getColumnIndex("usuario"));
		}
		cur.close();
		sql.close();
		return usuario;
	}
}
